home *** CD-ROM | disk | FTP | other *** search
/ Power CD / Power CD ATARI-Rechner Lieben.iso / ALLERLEI / GOBJ_112 / SOURCE / BEISPIEL / BEISPL10.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1994-03-27  |  15.7 KB  |  673 lines

  1. program Beispiel; {$X+} { Beispiel Nr.10 }
  2.  
  3. uses
  4.  
  5.     Gem,Objects,OTypes,OProcs,OWindows,OValidat,ODialogs;
  6.  
  7. const
  8.  
  9.     {$I beispiel.i}
  10.  
  11. type
  12.  
  13.     PBeispielWindow = ^TBeispielWindow;
  14.     PAttrDialog     = ^TAttrDialog;
  15.     PLineData       = ^TLineData;
  16.     PLinie          = ^TLinie;
  17.     PPunkt          = ^TPunkt;
  18.     PAbout          = ^TAbout;
  19.     PNew            = ^TNew;
  20.     POpen           = ^TOpen;
  21.     PSave           = ^TSave;
  22.     PSaveAs         = ^TSaveAs;
  23.     PInfo           = ^TInfo;
  24.     PAttrib         = ^TAttrib;
  25.  
  26.     TMyApplication = object(TApplication)
  27.         save  : PSave;
  28.         saveas: PSaveAs;
  29.         info  : PInfo;
  30.         procedure InitInstance; virtual;
  31.         procedure InitMainWindow; virtual;
  32.         { neue Methoden: }
  33.         procedure UpdateInfo; virtual;
  34.     end;
  35.  
  36.     TBeispielWindow = object(TWindow)
  37.         Veraendert: boolean;
  38.         Dicke,
  39.         Farbe,
  40.         Art       : integer;
  41.         Pfad,
  42.         Datei     : string;
  43.         Zeichnung : PCollection;
  44.         constructor Init(AParent: PWindow; ATitle: string);
  45.         destructor Done; virtual;
  46.         procedure GetWindowClass(var AWndClass: TWndClass); virtual;
  47.         function GetClassName: string; virtual;
  48.         function GetScroller: PScroller; virtual;
  49.         function GetStyle: integer; virtual;
  50.         function CanClose: boolean; virtual;
  51.         procedure Paint(var PaintInfo: TPaintStruct); virtual;
  52.         procedure WMButton(mX,mY,BStat,KStat,Clicks: integer); virtual;
  53.         { neue Methoden: }
  54.         procedure SetAttr(Width,Color,Style: integer); virtual;
  55.         procedure CreateTitle; virtual;
  56.         procedure Speichern; virtual;
  57.     end;
  58.  
  59.     TAttrDialog = object(TDialog)
  60.         function OK: boolean; virtual;
  61.         function Help: boolean; virtual;
  62.     end;
  63.  
  64.     TLineData = record
  65.         Farben: array [0..7] of integer;
  66.         Stile : array [1..6] of integer;
  67.         Breite: string[5]
  68.     end;
  69.  
  70.     TLinie = object(TObject)
  71.         Punkte: PCollection;
  72.         Dicke,
  73.         Farbe,
  74.         Art   : integer;
  75.         constructor Init(Width,Color,Style: integer);
  76.         destructor Done; virtual;
  77.         procedure NeuerPunkt(AX,AY: integer); virtual;
  78.         procedure Zeichnen; virtual;
  79.         procedure Speichern; virtual;
  80.     end;
  81.  
  82.     TPunkt = object(TObject)
  83.         X,
  84.         Y: integer;
  85.         constructor Init(AX,AY: integer);
  86.     end;
  87.  
  88.     TAbout  = object(TKeyMenu)
  89.         procedure Work; virtual;
  90.     end;
  91.  
  92.     TNew    = object(TKeyMenu)
  93.         procedure Work; virtual;
  94.     end;
  95.  
  96.     TOpen   = object(TKeyMenu)
  97.         procedure Work; virtual;
  98.     end;
  99.  
  100.     TSave   = object(TKeyMenu)
  101.         procedure Work; virtual;
  102.     end;
  103.  
  104.     TSaveAs = object(TKeyMenu)
  105.         procedure Work; virtual;
  106.     end;
  107.  
  108.     TInfo   = object(TKeyMenu)
  109.         st1,
  110.         st2: PStatic;
  111.         procedure Work; virtual;
  112.         procedure BerechneWerte; virtual;
  113.     end;
  114.  
  115.     TAttrib = object(TKeyMenu)
  116.         LineData: TLineData;
  117.         procedure Work; virtual;
  118.     end;
  119.  
  120. var
  121.  
  122.     MyApp: TMyApplication;
  123.     f    : file of integer;
  124.  
  125.  
  126. procedure MyResource; external; {$L beispiel.o}
  127.  
  128.  
  129. procedure TMyApplication.InitInstance;
  130.  
  131.     begin
  132.         InitResource(@MyResource,nil);
  133.         LoadMenu(BSPMENU);
  134.         new(PAbout,Init(@self,K_CTRL,Ctrl_A,MABOUT,MTITLE1));
  135.         new(PNew,Init(@self,K_CTRL,Ctrl_N,MNEW,MTITLE2));
  136.         new(POpen,Init(@self,K_CTRL,Ctrl_O,MOPEN,MTITLE2));
  137.         save:=new(PSave,Init(@self,K_CTRL,Ctrl_S,MSAVE,MTITLE2));
  138.         saveas:=new(PSaveAs,Init(@self,K_CTRL,Ctrl_D,MSAVEAS,MTITLE2));
  139.         info:=new(PInfo,Init(@self,K_CTRL,Ctrl_I,MINFO,MTITLE3));
  140.         new(PAttrib,Init(@self,K_CTRL,Ctrl_T,MATTR,MTITLE3));
  141.         inherited InitInstance;
  142.         SetQuit(MQUIT,MTITLE2);
  143.         save^.Disable;
  144.         saveas^.Disable
  145.     end;
  146.  
  147.  
  148. procedure TMyApplication.InitMainWindow;
  149.  
  150.     begin
  151.         new(PBeispielWindow,Init(nil,'Beispiel  [unbenannt]'));
  152.         if (MainWindow=nil) or (ChkError<em_OK) then
  153.             Status:=em_InvalidMainWindow
  154.     end;
  155.  
  156.  
  157. procedure TMyApplication.UpdateInfo;
  158.  
  159.     begin
  160.         if info^.ADialog<>nil then
  161.             if info^.ADialog^.Attr.Status=ws_Open then
  162.                 info^.BerechneWerte
  163.     end;
  164.  
  165.  
  166. constructor TBeispielWindow.Init(AParent: PWindow; ATitle: string);
  167.  
  168.     begin
  169.         if not(inherited Init(AParent,ATitle)) then fail;
  170.         new(Zeichnung,Init(10,10));
  171.         Veraendert:=false;
  172.         SetAttr(3,Blue,LT_SOLID);
  173.         Datei:='';
  174.         Pfad:=''
  175.     end;
  176.  
  177.  
  178. destructor TBeispielWindow.Done;
  179.  
  180.     begin
  181.         dispose(Zeichnung,Done);
  182.         inherited Done
  183.     end;
  184.  
  185.  
  186. function TBeispielWindow.CanClose: boolean;
  187.     var valid: boolean;
  188.  
  189.     begin
  190.         valid:=inherited CanClose;
  191.         if valid and Veraendert then
  192.             valid:=(Application^.Alert(@self,1,WAIT,
  193.                 ' Die Grafik wurde verändert!| Wollen Sie sie speichern?',
  194.               '&Ja|  &Nein  ')=2);
  195.         CanClose:=valid
  196.     end;
  197.  
  198.  
  199. procedure TBeispielWindow.GetWindowClass(var AWndClass: TWndClass);
  200.  
  201.     begin
  202.         inherited GetWindowClass(AWndClass);
  203.         AWndClass.hCursor:=IDC_PENCIL
  204.     end;
  205.  
  206.  
  207. function TBeispielWindow.GetClassName: string;
  208.  
  209.     begin
  210.         GetClassName:='BeispielWindow'
  211.     end;
  212.  
  213.  
  214. function TBeispielWindow.GetScroller: PScroller;
  215.  
  216.     begin
  217.         GetScroller:=new(PScroller,Init(@self,128,64,
  218.                          Application^.Attr.MaxPX shr 6,
  219.                          Application^.Attr.MaxPY shr 5))
  220.     end;
  221.  
  222.  
  223. function TBeispielWindow.GetStyle: integer;
  224.  
  225.     begin
  226.         GetStyle:=inherited GetStyle or SLIDER
  227.     end;
  228.  
  229.  
  230. procedure ZeichneLinienzug(p: PLinie);
  231.  
  232.     begin
  233.         p^.Zeichnen
  234.     end;
  235.  
  236.  
  237. procedure TBeispielWindow.Paint(var PaintInfo: TPaintStruct);
  238.  
  239.     begin
  240.         Zeichnung^.ForEach(@ZeichneLinienzug)
  241.     end;
  242.  
  243.  
  244. procedure TBeispielWindow.WMButton(mX,mY,BStat,KStat,Clicks: integer);
  245.     var xalt,yalt,btn,dummy: integer;
  246.         sx,sy              : longint;
  247.         pxyarray           : ptsin_ARRAY;
  248.         ALinie             : PLinie;
  249.  
  250.     begin
  251.         if bTst(BStat,1) then
  252.             if GetDC>=0 then
  253.                 begin
  254.                     wind_update(BEG_MCTRL);
  255.                     sx:=Scroller^.GetXOrg;
  256.                     sy:=Scroller^.GetYOrg;
  257.                     vsl_width(vdiHandle,Dicke);
  258.                     vsl_color(vdiHandle,Farbe);
  259.                     vsl_type(vdiHandle,Art);
  260.                     vsl_ends(vdiHandle,LE_ROUNDED,LE_ROUNDED);
  261.                     ALinie:=new(PLinie,Init(Dicke,Farbe,Art));
  262.                     Zeichnung^.Insert(ALinie);
  263.                     ALinie^.NeuerPunkt(mX-sx,mY-sy);
  264.                     repeat
  265.                         xalt:=mX;
  266.                         yalt:=mY;
  267.                         repeat
  268.                             graf_mkstate(mX,mY,btn,dummy)
  269.                         until (mX<>xalt) or (mY<>yalt) or not(bTst(btn,1));
  270.                         pxyarray[0]:=xalt;
  271.                         pxyarray[1]:=yalt;
  272.                         pxyarray[2]:=mX;
  273.                         pxyarray[3]:=mY;
  274.                         v_pline(vdiHandle,2,pxyarray);
  275.                         ALinie^.NeuerPunkt(mX-sx,mY-sy)
  276.                     until not(bTst(btn,1));
  277.                     wind_update(END_MCTRL);
  278.                     ReleaseDC;
  279.                     Veraendert:=true;
  280.                     CreateTitle;
  281.                     MyApp.saveas^.Enable;
  282.                     if length(Datei)>0 then MyApp.save^.Enable;
  283.                     MyApp.UpdateInfo
  284.                 end;
  285.         if bTst(BStat,2) then
  286.             if CanClose then
  287.                 begin
  288.                     Zeichnung^.FreeAll;
  289.                     ForceRedraw;
  290.                     Veraendert:=false;
  291.                     CreateTitle;
  292.                     MyApp.save^.Disable;
  293.                     MyApp.saveas^.Disable;
  294.                     MyApp.UpdateInfo
  295.                 end
  296.     end;
  297.  
  298.  
  299. procedure TBeispielWindow.SetAttr(Width,Color,Style: integer);
  300.     const farben: array [0..7] of string[7] =
  301.         ('weiß','schwarz','rot','grün','blau','türkis','gelb','violett');
  302.                 arten: array [1..6] of string[16] =
  303.         ('durchgehend','langer Strich','Punkte','Strich, Punkt',
  304.                                      'Strich','Strich, 2 Punkte');
  305.  
  306.     begin
  307.         Dicke:=Width;
  308.         Farbe:=Color;
  309.         Art:=Style;
  310.         SetSubTitle(' Dicke: '+ltoa(Dicke)+'  Farbe: '+farben[Farbe]+
  311.                                 '   Art: '+arten[Art])
  312.     end;
  313.  
  314.  
  315. procedure TBeispielWindow.CreateTitle;
  316.     var titel: string;
  317.  
  318.     begin
  319.         if length(Datei)=0 then titel:='[unbenannt]'
  320.         else
  321.             titel:=Pfad+Datei;
  322.         if Veraendert then titel:='*'+titel;
  323.         titel:='Beispiel  '+titel;
  324.         SetTitle(titel)
  325.     end;
  326.  
  327.  
  328. procedure SpeichereLinienzug(p: PLinie);
  329.  
  330.     begin
  331.         p^.Speichern
  332.     end;
  333.  
  334.  
  335. procedure TBeispielWindow.Speichern;
  336.  
  337.     begin
  338.         BusyMouse;
  339.         assign(f,Pfad+Datei);
  340.         rewrite(f);
  341.         Zeichnung^.ForEach(@SpeichereLinienzug);
  342.         close(f);
  343.         ArrowMouse;
  344.         Veraendert:=false;
  345.         CreateTitle
  346.     end;
  347.  
  348.  
  349. function TAttrDialog.OK: boolean;
  350.     var valid: boolean;
  351.         d,f,s: integer;
  352.         attrb: ARRAY_4;
  353.  
  354.     begin
  355.         valid:=inherited OK;
  356.         if valid then
  357.             begin
  358.                 with PLineData(TransferBuffer)^ do
  359.                     begin
  360.                         f:=0;
  361.                         while Farben[f]<>bf_Checked do inc(f);
  362.                         s:=1;
  363.                         while Stile[s]<>bf_Checked do inc(s);
  364.                         vsl_width(vdiHandle,atol(Breite))
  365.                     end;
  366.                 vql_attributes(vdiHandle,attrb);
  367.                 PBeispielWindow(Application^.MainWindow)^.SetAttr(attrb[3],f,s)
  368.             end;
  369.         OK:=valid
  370.     end;
  371.  
  372.  
  373. function TAttrDialog.Help: boolean;
  374.  
  375.     begin
  376.         Application^.Alert(@self,1,NO_ICON,'In dieser Dialogbox werden die|Attribute der Linien eingestellt.|Die neuen Werte gelten ab der|ersten Linie, die nach dem|Schließen der Box gezeichnet|wird.','   &OK   ');
  377.         Help:=false
  378.     end;
  379.  
  380.  
  381. constructor TLinie.Init(Width,Color,Style: integer);
  382.  
  383.     begin
  384.         if not(inherited Init) then fail;
  385.         new(Punkte,Init(50,50));
  386.         Dicke:=Width;
  387.         Farbe:=Color;
  388.         Art:=Style
  389.     end;
  390.  
  391.  
  392. destructor TLinie.Done;
  393.  
  394.     begin
  395.         dispose(Punkte,Done);
  396.         inherited Done
  397.     end;
  398.  
  399.  
  400. procedure TLinie.NeuerPunkt(AX,AY: integer);
  401.  
  402.     begin
  403.         Punkte^.Insert(new(PPunkt,Init(AX,AY)))
  404.     end;
  405.  
  406.  
  407. procedure TLinie.Zeichnen;
  408.     var q       : longint;
  409.         vh,dx,dy: integer;
  410.         pxyarray: ptsin_ARRAY;
  411.  
  412.     begin
  413.         if Punkte^.Count>1 then
  414.             begin
  415.                 with Application^ do
  416.                     begin
  417.                         vh:=vdiHandle;
  418.                         dx:=MainWindow^.Scroller^.GetXOrg;
  419.                         dy:=MainWindow^.Scroller^.GetYOrg
  420.                     end;
  421.                 vsl_width(vh,Dicke);
  422.                 vsl_color(vh,Farbe);
  423.                 vsl_type(vh,Art);
  424.                 vsl_ends(vh,LE_ROUNDED,LE_ROUNDED);
  425.                 with PPunkt(Punkte^.At(0))^ do
  426.                     begin
  427.                         pxyarray[2]:=X+dx;
  428.                         pxyarray[3]:=Y+dy
  429.                     end;
  430.                 for q:=1 to pred(Punkte^.Count) do
  431.                     with PPunkt(Punkte^.At(q))^ do
  432.                         begin
  433.                             pxyarray[0]:=pxyarray[2];
  434.                             pxyarray[1]:=pxyarray[3];
  435.                             pxyarray[2]:=X+dx;
  436.                             pxyarray[3]:=Y+dy;
  437.                             v_pline(vh,2,pxyarray)
  438.                         end
  439.             end
  440.     end;
  441.  
  442.  
  443. procedure TLinie.Speichern;
  444.     var q  : longint;
  445.         cnt: integer;
  446.  
  447.     begin
  448.         cnt:=Punkte^.Count;
  449.         if cnt>0 then
  450.             begin
  451.                 write(f,Dicke,Farbe,Art,cnt);
  452.                 for q:=0 to pred(cnt) do
  453.                     with PPunkt(Punkte^.At(q))^ do
  454.                         write(f,X,Y)
  455.             end
  456.     end;
  457.  
  458.  
  459. constructor TPunkt.Init(AX,AY: integer);
  460.  
  461.     begin
  462.         if not(inherited Init) then fail;
  463.         X:=AX;
  464.         Y:=AY
  465.     end;
  466.  
  467.  
  468. procedure TAbout.Work;
  469.  
  470.     begin
  471.         if ADialog=nil then
  472.             begin
  473.                 new(ADialog,Init(nil,'Über Beispiel',BSPABOUT));
  474.                 if ADialog<>nil then
  475.                     begin
  476.                         new(PGroupBox,Init(ADialog,IGROUP,'ObjectGEM '+
  477.                                                                 'Beispielprogramm','"42"'));
  478.                         new(PButton,Init(ADialog,IOK,id_OK,true,'Mit diesem '+
  479.                                             'Button|kann die Infobox|verlassen werden.'))
  480.                     end
  481.             end;
  482.         if ADialog<>nil then ADialog^.MakeWindow
  483.     end;
  484.  
  485.  
  486. procedure TNew.Work;
  487.  
  488.     begin
  489.         with PBeispielWindow(Application^.MainWindow)^ do
  490.             if CanClose then
  491.                 begin
  492.                     Zeichnung^.FreeAll;
  493.                     ForceRedraw;
  494.                     Veraendert:=false;
  495.                     Pfad:='';
  496.                     Datei:='';
  497.                     CreateTitle;
  498.                     MyApp.save^.Disable;
  499.                     MyApp.saveas^.Disable;
  500.                     MyApp.UpdateInfo
  501.                 end
  502.     end;
  503.  
  504.  
  505. procedure TOpen.Work;
  506.     var ALinie           : PLinie;
  507.         width,color,style: integer;
  508.         cnt,x,y          : integer;
  509.         q                : longint;
  510.  
  511.     begin
  512.         with PBeispielWindow(Application^.MainWindow)^ do
  513.             if FileSelect(nil,'BEISPIEL-LINIEN LADEN','*.BLN',
  514.                                             Pfad,Datei,true) then
  515.                 begin
  516.                     BusyMouse;
  517.                     Zeichnung^.FreeAll;
  518.                     assign(f,Pfad+Datei);
  519.                     reset(f);
  520.                     while not(eof(f)) do
  521.                         begin
  522.                             read(f,width,color,style,cnt);
  523.                             ALinie:=new(PLinie,Init(width,color,style));
  524.                             Zeichnung^.Insert(ALinie);
  525.                             for q:=1 to cnt do
  526.                                 begin
  527.                                     read(f,x,y);
  528.                                     ALinie^.NeuerPunkt(x,y)
  529.                                 end
  530.                         end;
  531.                     close(f);
  532.                     ArrowMouse;
  533.                     Veraendert:=false;
  534.                     CreateTitle;
  535.                     ForceRedraw;
  536.                     MyApp.save^.Enable;
  537.                     MyApp.saveas^.Enable;
  538.                     MyApp.UpdateInfo
  539.                 end
  540.     end;
  541.  
  542.  
  543. procedure TSave.Work;
  544.  
  545.     begin
  546.         PBeispielWindow(Application^.MainWindow)^.Speichern
  547.     end;
  548.  
  549.  
  550. procedure TSaveAs.Work;
  551.  
  552.     begin
  553.         with PBeispielWindow(Application^.MainWindow)^ do
  554.             if FileSelect(nil,'BEISPIEL-LINIEN SPEICHERN','*.BLN',
  555.                                             Pfad,Datei,false) then
  556.                 begin
  557.                     Speichern;
  558.                     MyApp.save^.Enable
  559.                 end
  560.     end;
  561.  
  562.  
  563. procedure TInfo.Work;
  564.  
  565.     begin
  566.         if ADialog=nil then
  567.             begin
  568.                 new(ADialog,Init(nil,'Info',BSPINFO));
  569.                 if ADialog<>nil then
  570.                     begin
  571.                         new(st1,Init(ADialog,FPOLY,22,false,'Gibt die Anzahl|der Linienzüge an.'));
  572.                         new(st2,Init(ADialog,FLINES,24,false,'Gibt die Anzahl|der Einzellinien|aller Linienzüge|an.'));
  573.                         new(PButton,Init(ADialog,FOK,id_OK,true,'Mit diesem '+
  574.                                             'Button|kann die Infobox|verlassen werden.'))
  575.                     end
  576.             end;
  577.         if ADialog<>nil then
  578.             begin
  579.                 BerechneWerte;
  580.                 ADialog^.MakeWindow
  581.             end
  582.     end;
  583.  
  584.  
  585. procedure TInfo.BerechneWerte;
  586.     var q,anz: longint;
  587.  
  588.     begin
  589.         with PBeispielWindow(Application^.MainWindow)^ do
  590.             begin
  591.                 anz:=0;
  592.                 st1^.SetText('Linienzüge:      '+ltoa(Zeichnung^.Count));
  593.                 if Zeichnung^.Count>0 then
  594.                     for q:=0 to pred(Zeichnung^.Count) do
  595.                         inc(anz,PLinie(Zeichnung^.At(q))^.Punkte^.Count);
  596.                 st2^.SetText('Linien (gesamt): '+ltoa(anz))
  597.             end
  598.     end;
  599.  
  600.  
  601. procedure TAttrib.Work;
  602.     var ed: PEdit;
  603.         q : integer;
  604.  
  605.     begin
  606.         if ADialog=nil then
  607.             begin
  608.                 ADialog:=new(PAttrDialog,Init(nil,'Attribute',BSPATTR));
  609.                 if ADialog<>nil then
  610.                     begin
  611.                         new(PGroupBox,Init(ADialog,ACGROUP,'Farbe',
  612.                                                         'Bestimmt die|Linienfarbe'));
  613.                         new(PGroupBox,Init(ADialog,ASGROUP,'Stil',
  614.                                                         'Bestimmt den|Linienstil'));
  615.                         new(PRadioButton,Init(ADialog,AWHITE,true,
  616.                                                         'Setzt Weiß als|neue Linienfarbe'));
  617.                         new(PRadioButton,Init(ADialog,ABLACK,true,
  618.                                                         'Setzt Schwarz als|neue Linienfarbe'));
  619.                         new(PRadioButton,Init(ADialog,ARED,true,
  620.                                                         'Setzt Rot als|neue Linienfarbe'));
  621.                         new(PRadioButton,Init(ADialog,AGREEN,true,
  622.                                                         'Setzt Grün als|neue Linienfarbe'));
  623.                         new(PRadioButton,Init(ADialog,ABLUE,true,
  624.                                                         'Setzt Blau als|neue Linienfarbe'));
  625.                         new(PRadioButton,Init(ADialog,ACYAN,true,
  626.                                                         'Setzt Türkis als|neue Linienfarbe'));
  627.                         new(PRadioButton,Init(ADialog,AYELLOW,true,
  628.                                                         'Setzt Gelb als|neue Linienfarbe'));
  629.                         new(PRadioButton,Init(ADialog,AMAGENTA,true,
  630.                                                         'Setzt Violett als|neue Linienfarbe'));
  631.                         new(PRadioButton,Init(ADialog,ASOLID,true,
  632.                                                         'Setzt LT_SOLID als|neuen Linienstil'));
  633.                         new(PRadioButton,Init(ADialog,ALONG,true,
  634.                                                         'Setzt LT_LONGDASH als|neuen Linienstil'));
  635.                         new(PRadioButton,Init(ADialog,ADOTS,true,
  636.                                                         'Setzt LT_DOTTED als|neuen Linienstil'));
  637.                         new(PRadioButton,Init(ADialog,ALINEDOT,true,
  638.                                                         'Setzt LT_DASHDOT als|neuen Linienstil'));
  639.                         new(PRadioButton,Init(ADialog,ALINE,true,
  640.                                                         'Setzt LT_DASHED als|neuen Linienstil'));
  641.                         new(PRadioButton,Init(ADialog,ALIN2DOT,true,
  642.                                                         'Setzt LT_DASHDOTDOT|als neuen Linienstil'));
  643.                         ed:=new(PEdit,Init(ADialog,AWIDTH,5,
  644.                                     'Gibt die Linien-|stärke an (1,3,..).|Immer UNgerade!'));
  645.                         new(PButton,Init(ADialog,ACANCEL,id_Cancel,true,
  646.                             'Bricht den Dialog ab,|ohne die neuen Werte|zu übernehmen'));
  647.                         new(PButton,Init(ADialog,AOK,id_OK,true,
  648.                                                     'Beendet den Dialog und|setzt die neuen Werte'));
  649.                         new(PButton,Init(ADialog,AHELP,id_Help,false,
  650.                             'Zeigt einen allgemeinen|Hilfstext über diesen|Dialog an.'));
  651.                         fillchar(LineData,sizeof(LineData),0);
  652.                         with PBeispielWindow(Application^.MainWindow)^ do
  653.                             with LineData do
  654.                                 begin
  655.                                     for q:=0 to 7 do Farben[q]:=bf_Unchecked;
  656.                                     for q:=1 to 6 do Stile[q]:=bf_Unchecked;
  657.                                     Farben[Farbe]:=bf_Checked;
  658.                                     Stile[Art]:=bf_Checked;
  659.                                     Breite:=ltoa(Dicke)
  660.                                 end;
  661.                         ADialog^.TransferBuffer:=@LineData;
  662.                         ed^.SetValidator(new(PRangeValidator,Init(1,99)))
  663.                     end
  664.             end;
  665.         if ADialog<>nil then ADialog^.MakeWindow
  666.     end;
  667.  
  668.  
  669. begin
  670.     MyApp.Init('BSPL','Beispiel');
  671.     MyApp.Run;
  672.     MyApp.Done
  673. end.